/*
 * StorePalabras.h
 *
 *  Created on: 21/04/2011
 *      Author: Casa
 */

#ifndef STORE_PALABRAS_
#define STORE_PALABRAS_

#include "iostream"
#include "estructuras/lista/Lista.h"
#include "contador/Contador.h"
#include "estructuras/lista/Comparador.h"
using namespace std;

class NodoArbol;
class StorePalabras {
private:
	NodoArbol *raiz, *actual;
	string autor;
	void rotacionDerecha(NodoArbol *p, NodoArbol *q);
	void rotacionIzquierda(NodoArbol *p, NodoArbol *q);
	NodoArbol *dobleRotacionDerecha(NodoArbol *p, NodoArbol *q);
	NodoArbol *dobleRotacionIzquierda(NodoArbol *p, NodoArbol *q);
	Lista<string> inordenRec(NodoArbol * n);
	Lista<Contador> inordenRec(NodoArbol * n, Comparador<Contador> * ordenamiento);
	int getOcurrenciasRec(NodoArbol *nodo, string &palabra);
	int agregarOcurrenciasRec(NodoArbol *nodo, string & palabra, int ocurrencias);
	void deleteRec(NodoArbol *);
	char getClave(const string & palabra);
public:
    StorePalabras(const char * autor);
    StorePalabras(string autor);
    ~StorePalabras();
    int getOcurrencias(const string& );
    void agregarOcurrencias(string & ,int);
    Lista<string> inorden();
    Lista<Contador> inordenSinComparador();
    Lista<Contador> inorden(Comparador<Contador> *ordenamiento);
    void insert(string& );
    string getAutor() const;

};

#endif /* STORE_PALABRAS_ */
